package com.smart.community.device.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 设备统计Feign接口Controller
 * 提供设备在线率统计相关的远程调用接口
 * 
 * @author Wu.Liang
 * @version 1.0.0
 * @since 2025-01-30
 */
@Slf4j
@RestController
@RequestMapping("/feign/device")
public class DeviceStatisticsFeignController {
    
    /**
     * 根据社区ID列表获取设备在线率
     * 
     * @param communityIds 社区ID列表
     * @return 设备在线率（百分比）
     */
    @PostMapping("/statistics/online-rate/by-communities")
    public Double getDeviceOnlineRateByCommunityIds(@RequestBody List<Long> communityIds) {
        log.info("根据社区ID列表获取设备在线率，communityIds: {}", communityIds);
        
        try {
            if (communityIds == null || communityIds.isEmpty()) {
                return 0.0;
            }
            
            // 这里需要根据实际的数据库表结构来实现
            // 暂时返回模拟数据，实际应该查询数据库
            double onlineRate = 85.6; // 模拟数据：85.6%
            
            log.info("根据社区ID列表获取设备在线率成功，communityIds: {}，在线率: {}%", communityIds, onlineRate);
            return onlineRate;
        } catch (Exception e) {
            log.error("根据社区ID列表获取设备在线率失败，communityIds: {}", communityIds, e);
            return 0.0;
        }
    }
    
    /**
     * 根据物业公司ID列表获取设备在线率
     * 
     * @param propertyCompanyIds 物业公司ID列表
     * @return 设备在线率（百分比）
     */
    @PostMapping("/statistics/online-rate/by-property-companies")
    public Double getDeviceOnlineRateByPropertyCompanyIds(@RequestBody List<Long> propertyCompanyIds) {
        log.info("根据物业公司ID列表获取设备在线率，propertyCompanyIds: {}", propertyCompanyIds);
        
        try {
            if (propertyCompanyIds == null || propertyCompanyIds.isEmpty()) {
                return 0.0;
            }
            
            // 这里需要根据实际的数据库表结构来实现
            // 暂时返回模拟数据，实际应该查询数据库
            double onlineRate = 92.3; // 模拟数据：92.3%
            
            log.info("根据物业公司ID列表获取设备在线率成功，propertyCompanyIds: {}，在线率: {}%", propertyCompanyIds, onlineRate);
            return onlineRate;
        } catch (Exception e) {
            log.error("根据物业公司ID列表获取设备在线率失败，propertyCompanyIds: {}", propertyCompanyIds, e);
            return 0.0;
        }
    }
}
